import numpy as np

#排序

arr = np.array([3.2, 1.5, 4.8, 2.1, 5.3])
idx = np.argsort(arr) #[1 3 0 2 4]
print(idx)

# 使用列表创建一维数组
a = np.array([1, 2, 3])
print(a)

# 使用嵌套列表结构创建二维数组
b = np.array([[1, 2], [3, 4]])
print(b)


#数组运算

c = np.array([10, 20, 30])
d = c * 2 + 5  # 向量乘法加常数
print(d)       # 结果为 [25 45 65]

e = np.array([1, 2, 3])
f = e ** 2     # 平方每一个元素
print(f)       # 结果为 [1 4 9]


#切片索引

g = np.arange(10)**2    # 创建包含平方值的一维数组
h = g[2:7]              # 获取第3到第8个元素（不包括）
i = g[g % 2 == 0]        # 只获取偶数值的位置
j = g[[0, 2, 4]]         # 特定位置的选择
print(h, i, j)

#多维数组

k = np.random.rand(3, 4)      # 随机生成三维浮点型矩阵
l = k.sum(axis=0)             # 计算每一列之和
m = (k.T @ k).trace()          # 转置相乘并求迹
n = np.linalg.det(k)           # 行列式
o = np.max(k, axis=(0, 1))     # 整体最大值
p = np.mean(k[:, :])            # 所有元素平均值
q = np.std(k.flatten())         # 总的标准差
r = np.percentile(k.ravel(), 50)# 中位数
s = np.sort(k, axis=None)[-3:]  # 排序后的最后三个大数
t = np.unique(np.round(k*10)/10.)[:5] # 前五个唯一近似值
u = np.nonzero(k>np.median(k))[0][:3]  # 较高一半中的前三个非零项下标
v = np.where(k==np.amax(k), 'Max', '') # 将最大值标记出来
w = np.apply_along_axis(lambda x: sorted(x)[::-1][0:2], 1, k) # 每行最大的两个数降序排列
x = np.split(k,[1,2])[1].flatten().tolist()[::2]               # 分割后中间部分每隔一项取一次直到结束转换成list形式
y = np.reshape(k,(2,-1)).T                                     # 更改形状再转置
z = np.tile(k,(2,1))                                           # 重复堆叠两次沿第一个轴方向
aa = np.concatenate((k,k[::-1]),axis=-1)                       # 上下半颠倒拼接在一起最后一维扩展两倍长度
ab = np.stack((k,k+1),axis=-1)                                 # 新增最内层维度并将原数组与其逐元素增加1的结果组合起来形成新的三维张量
ac = np.hstack((k,np.zeros_like(k)))                           # 左右两侧水平连接相同大小全零填充的新列构成更大的矩形区域
ad = np.vstack((np.ones(shape=k.shape[:-1]+tuple([1])),k))     # 在顶部垂直粘贴一层宽度等于输入但高度仅为单像素且全部设为1.0作为边界线
ae = np.dstack((k[:,:,None]*range(1,4),k[:,:,:,None]))         # 把原始图像按通道复制三份分别乘以不同系数之后叠加于第四维之上同时保留原有空间坐标不变从而构建RGB彩色图样效果
af = np.moveaxis(k,-1,0)                                       # 移动最后一个轴至最前面成为新批次编号
ag = np.swapaxes(k,0,1)                                        # 交换前后两个轴顺序使得原本横向遍历变为纵向扫描模式
ah = np.roll(k,shift=[-1,-2],axis=(0,1))                      # 循环平移指定偏移距离沿着给定的方向移动各行列内容
ai = np.flipud(k)                                              # 翻转上下使原来位于上方的部分现在处于下方反之亦然保持其他属性一致
aj = np.fliplr(k)                                              # 类似地反转左右关系即镜像映射操作
ak = np.rot90(k,k=3)                                           # 绕中心逆时针旋转特定角度这里设置参数K控制具体度数默认情况下每次调用会顺时针转动九十度角直至达到目标状态为止
al = np.diag_indices_from(k)                                   # 返回可用于提取对角线上所有元素坐标的整数元组集合方便后续进一步分析利用
am = np.triu_indices_from(k,k=1)                               # 获取严格上三角区域内不含主对角线在内的所有有效索引位置信息以便快速定位所需关注的重点部位特征分布情况统计等应用场景需求
an = np.fill_diagonal(k,fill_value=np.inf)                    # 设置对角线上的值为无穷大表示该处不可达路径权重极大化处理

